﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Runtime.Serialization;

namespace Data
{
    [DataContract]
    public class User
    {
        #region Serializable
        [DataMember]
        private String _name;
        public String Name
        {
            get { return _name; }
        }

        [DataMember]
        private Boolean _isAdmin = false;
        public Boolean IsAdmin
        {
            get { return _isAdmin; }
        }
        #endregion


        #region Объектная модель
        static private readonly Dictionary<String, User> _allUsers = new Dictionary<String, User>();
        static public Dictionary<String, User> AllUsers { get { return _allUsers; } }

        /// <summary>
        /// Метод, который добавляет User в _allUsers после его получения с сервера
        /// </summary>
        /// <param name="us">Вносится в _allUsers</param>
        static public void AddToAllUsers(User user)
        {
            if (null != user)
            {
                if (!_allUsers.Keys.Contains(user.Name))
                {
                    _allUsers.Add(user.Name, user);
                }
            }
        }

        static public User GetByName(String name)
        {
            if(_allUsers.ContainsKey(name))
            {
                return _allUsers[name];
            }
            else
            {
                return null;
            }
        }
        #endregion
        
        // название таблицы в БД, которая представляет экземпляры данного класса
        static private readonly String _tableName = "[users]";
        static public String TableName
        {
            get { return _tableName; }
        }

        /// <summary>
        /// Конструктор класса, берет данные для инициализации из БД
        /// </summary>
        /// <param name="reader">"Строка" из БД</param>
        public User(SqlDataReader reader)
        {
            if (null != reader)
            {
                //reader.Read();
                _name = (String)reader["id"];
                _isAdmin = (Boolean)reader["admin"];
                //reader.Close();
                // не добавляем в _allSongs, т.к. это не нужно на сервере
                //_allUsers.Add(_name, this);
            }
        }
    }
}
